package com.deco.back.config;

import com.google.code.kaptcha.servlet.KaptchaServlet;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextListener;
import org.springframework.web.filter.DelegatingFilterProxy;

import java.util.EventListener;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
@Configuration
public class FilterConfig {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/
//    @Bean
//    public FilterRegistrationBean xssFilterRegistration(){
//        FilterRegistrationBean registration = new FilterRegistrationBean(new XssFilter());
//        registration.addUrlPatterns("/*");
//        registration.setName("xssFilter");
//        registration.setOrder(1);
//        return registration;
//    }

    @Bean
    public ServletListenerRegistrationBean<EventListener> requestContextListener(){
        ServletListenerRegistrationBean<EventListener> registrationBean
                =new ServletListenerRegistrationBean<>();
        registrationBean.setListener(new RequestContextListener());
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean shiroFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean(new DelegatingFilterProxy("shiroFilter"));
        registration.addUrlPatterns("/*"); //
        registration.setName("shiroFilter");
        registration.setOrder(2);
        return registration;
    }

    @Bean
    public ServletRegistrationBean kaptaServletRegistration(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new KaptchaServlet(),"/kaptcha");
        Map<String,String> kaptchaParams = new HashMap<String,String>();
        kaptchaParams.put("kaptcha.textproducer.char.length", "6");
        kaptchaParams.put("kaptcha.border", "no");
        kaptchaParams.put("kaptcha.textproducer.font.color", "red");
        kaptchaParams.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        kaptchaParams.put("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
        servletRegistrationBean.setInitParameters(kaptchaParams);
        return servletRegistrationBean;
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
